{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": true,
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:46.730429200Z",
     "start_time": "2024-05-01T12:58:46.403159100Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cloth         a         b         c         d\n",
      "size                                         \n",
      "0     -1.748599  0.347039 -0.486556  0.035840\n",
      "1      0.850752  0.885648  0.802929 -1.246225\n",
      "2      0.645020  0.418125  0.022085 -1.335764\n",
      "--------------------------------------------------\n",
      "cloth         a         b         c         d\n",
      "size                                         \n",
      "0     -1.748599       NaN -0.486556  0.035840\n",
      "1      0.850752  0.885648  0.802929 -1.246225\n",
      "2      0.645020  0.418125  0.022085 -1.335764\n",
      "--------------------------------------------------\n",
      "cloth\n",
      "a   -1.748599\n",
      "b    0.418125\n",
      "c   -0.486556\n",
      "d   -1.335764\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "index1 = pd.MultiIndex.from_arrays([['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c', 'd', 'd', 'd'],\n",
    "                [0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2]], names=['cloth', 'size'])\n",
    "\n",
    "ser_obj = pd.Series(np.random.randn(12),index=index1)\n",
    "df_obj=ser_obj.unstack(0)\n",
    "print(df_obj)\n",
    "print('-'*50)\n",
    "\n",
    "#计算最小值有空值如何处理\n",
    "df_obj.loc[0,'b']=np.nan\n",
    "print(df_obj)\n",
    "print('-'*50)\n",
    "\n",
    "print(df_obj.min(axis=0, skipna=True))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "cloth         a         b         c         d\n",
      "count  3.000000  2.000000  3.000000  3.000000\n",
      "mean  -0.084276  0.651887  0.112820 -0.848717\n",
      "std    1.445012  0.330588  0.649513  0.767356\n",
      "min   -1.748599  0.418125 -0.486556 -1.335764\n",
      "25%   -0.551789  0.535006 -0.232235 -1.290995\n",
      "50%    0.645020  0.651887  0.022085 -1.246225\n",
      "75%    0.747886  0.768767  0.412507 -0.605193\n",
      "max    0.850752  0.885648  0.802929  0.035840\n"
     ]
    }
   ],
   "source": [
    "print(df_obj.describe())"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:46.789223600Z",
     "start_time": "2024-05-01T12:58:46.732425700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Index: 3 entries, 0 to 2\n",
      "Data columns (total 4 columns):\n",
      " #   Column  Non-Null Count  Dtype  \n",
      "---  ------  --------------  -----  \n",
      " 0   a       3 non-null      float64\n",
      " 1   b       2 non-null      float64\n",
      " 2   c       3 non-null      float64\n",
      " 3   d       3 non-null      float64\n",
      "dtypes: float64(4)\n",
      "memory usage: 228.0 bytes\n",
      "None\n"
     ]
    }
   ],
   "source": [
    "print(df_obj.info())"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-05-01T13:01:40.618435400Z",
     "start_time": "2024-05-01T13:01:40.601481700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "outputs": [
    {
     "data": {
      "text/plain": "size\n0   -0.486556\n1    0.802929\n2    0.022085\nName: c, dtype: float64"
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_obj.loc[:,'c']"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:46.790020600Z",
     "start_time": "2024-05-01T12:58:46.762097Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0\n"
     ]
    }
   ],
   "source": [
    "#计算最小值或者最大值的索引的位置\n",
    "print(df_obj.loc[:,'c'].argmin())#argmin和argmax只能是series，不能是df"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:46.807971900Z",
     "start_time": "2024-05-01T12:58:46.778055100Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "outputs": [
    {
     "data": {
      "text/plain": "cloth         a         b         c         d\nsize                                         \n0     -1.748599       NaN -0.486556  0.035840\n1      0.850752  0.885648  0.802929 -1.246225\n2      0.645020  0.418125  0.022085 -1.335764",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th>cloth</th>\n      <th>a</th>\n      <th>b</th>\n      <th>c</th>\n      <th>d</th>\n    </tr>\n    <tr>\n      <th>size</th>\n      <th></th>\n      <th></th>\n      <th></th>\n      <th></th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>-1.748599</td>\n      <td>NaN</td>\n      <td>-0.486556</td>\n      <td>0.035840</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>0.850752</td>\n      <td>0.885648</td>\n      <td>0.802929</td>\n      <td>-1.246225</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.645020</td>\n      <td>0.418125</td>\n      <td>0.022085</td>\n      <td>-1.335764</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_obj"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:46.853849200Z",
     "start_time": "2024-05-01T12:58:46.796005Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "outputs": [
    {
     "data": {
      "text/plain": "cloth\na    0\nb    2\nc    0\nd    2\ndtype: int64"
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#返回的是一个series\n",
    "#计算最小值或者最大值的索引值\n",
    "df_obj.idxmin(axis=0, skipna=True)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:46.854847400Z",
     "start_time": "2024-05-01T12:58:46.827919600Z"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-04-29T11:16:07.516464Z",
     "start_time": "2024-04-29T11:16:07.499209200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "size\n",
      "0    a\n",
      "1    d\n",
      "2    c\n",
      "dtype: object\n"
     ]
    }
   ],
   "execution_count": 51
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1000 entries, 0 to 999\n",
      "Data columns (total 12 columns):\n",
      " #   Column              Non-Null Count  Dtype  \n",
      "---  ------              --------------  -----  \n",
      " 0   Rank                1000 non-null   int64  \n",
      " 1   Title               1000 non-null   object \n",
      " 2   Genre               1000 non-null   object \n",
      " 3   Description         1000 non-null   object \n",
      " 4   Director            1000 non-null   object \n",
      " 5   Actors              1000 non-null   object \n",
      " 6   Year                1000 non-null   int64  \n",
      " 7   Runtime (Minutes)   1000 non-null   int64  \n",
      " 8   Rating              1000 non-null   float64\n",
      " 9   Votes               1000 non-null   int64  \n",
      " 10  Revenue (Millions)  872 non-null    float64\n",
      " 11  Metascore           936 non-null    float64\n",
      "dtypes: float64(3), int64(4), object(5)\n",
      "memory usage: 93.9+ KB\n",
      "None\n",
      "--------------------------------------------------\n",
      "   Rank                    Title                     Genre  \\\n",
      "0     1  Guardians of the Galaxy   Action,Adventure,Sci-Fi   \n",
      "1     2               Prometheus  Adventure,Mystery,Sci-Fi   \n",
      "2     3                    Split           Horror,Thriller   \n",
      "3     4                     Sing   Animation,Comedy,Family   \n",
      "4     5            Suicide Squad  Action,Adventure,Fantasy   \n",
      "\n",
      "                                         Description              Director  \\\n",
      "0  A group of intergalactic criminals are forced ...            James Gunn   \n",
      "1  Following clues to the origin of mankind, a te...          Ridley Scott   \n",
      "2  Three girls are kidnapped by a man with a diag...    M. Night Shyamalan   \n",
      "3  In a city of humanoid animals, a hustling thea...  Christophe Lourdelet   \n",
      "4  A secret government agency recruits some of th...            David Ayer   \n",
      "\n",
      "                                              Actors  Year  Runtime (Minutes)  \\\n",
      "0  Chris Pratt, Vin Diesel, Bradley Cooper, Zoe S...  2014                121   \n",
      "1  Noomi Rapace, Logan Marshall-Green, Michael Fa...  2012                124   \n",
      "2  James McAvoy, Anya Taylor-Joy, Haley Lu Richar...  2016                117   \n",
      "3  Matthew McConaughey,Reese Witherspoon, Seth Ma...  2016                108   \n",
      "4  Will Smith, Jared Leto, Margot Robbie, Viola D...  2016                123   \n",
      "\n",
      "   Rating   Votes  Revenue (Millions)  Metascore  \n",
      "0     8.1  757074              333.13       76.0  \n",
      "1     7.0  485820              126.46       65.0  \n",
      "2     7.3  157606              138.12       62.0  \n",
      "3     7.2   60545              270.32       59.0  \n",
      "4     6.2  393727              325.02       40.0  \n",
      "--------------------------------------------------\n"
     ]
    },
    {
     "data": {
      "text/plain": "              Rank         Year  Runtime (Minutes)       Rating         Votes  \\\ncount  1000.000000  1000.000000        1000.000000  1000.000000  1.000000e+03   \nmean    500.500000  2012.783000         113.172000     6.723200  1.698083e+05   \nstd     288.819436     3.205962          18.810908     0.945429  1.887626e+05   \nmin       1.000000  2006.000000          66.000000     1.900000  6.100000e+01   \n25%     250.750000  2010.000000         100.000000     6.200000  3.630900e+04   \n50%     500.500000  2014.000000         111.000000     6.800000  1.107990e+05   \n75%     750.250000  2016.000000         123.000000     7.400000  2.399098e+05   \nmax    1000.000000  2016.000000         191.000000     9.000000  1.791916e+06   \n\n       Revenue (Millions)   Metascore  \ncount          872.000000  936.000000  \nmean            82.956376   58.985043  \nstd            103.253540   17.194757  \nmin              0.000000   11.000000  \n25%             13.270000   47.000000  \n50%             47.985000   59.500000  \n75%            113.715000   72.000000  \nmax            936.630000  100.000000  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Rank</th>\n      <th>Year</th>\n      <th>Runtime (Minutes)</th>\n      <th>Rating</th>\n      <th>Votes</th>\n      <th>Revenue (Millions)</th>\n      <th>Metascore</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>count</th>\n      <td>1000.000000</td>\n      <td>1000.000000</td>\n      <td>1000.000000</td>\n      <td>1000.000000</td>\n      <td>1.000000e+03</td>\n      <td>872.000000</td>\n      <td>936.000000</td>\n    </tr>\n    <tr>\n      <th>mean</th>\n      <td>500.500000</td>\n      <td>2012.783000</td>\n      <td>113.172000</td>\n      <td>6.723200</td>\n      <td>1.698083e+05</td>\n      <td>82.956376</td>\n      <td>58.985043</td>\n    </tr>\n    <tr>\n      <th>std</th>\n      <td>288.819436</td>\n      <td>3.205962</td>\n      <td>18.810908</td>\n      <td>0.945429</td>\n      <td>1.887626e+05</td>\n      <td>103.253540</td>\n      <td>17.194757</td>\n    </tr>\n    <tr>\n      <th>min</th>\n      <td>1.000000</td>\n      <td>2006.000000</td>\n      <td>66.000000</td>\n      <td>1.900000</td>\n      <td>6.100000e+01</td>\n      <td>0.000000</td>\n      <td>11.000000</td>\n    </tr>\n    <tr>\n      <th>25%</th>\n      <td>250.750000</td>\n      <td>2010.000000</td>\n      <td>100.000000</td>\n      <td>6.200000</td>\n      <td>3.630900e+04</td>\n      <td>13.270000</td>\n      <td>47.000000</td>\n    </tr>\n    <tr>\n      <th>50%</th>\n      <td>500.500000</td>\n      <td>2014.000000</td>\n      <td>111.000000</td>\n      <td>6.800000</td>\n      <td>1.107990e+05</td>\n      <td>47.985000</td>\n      <td>59.500000</td>\n    </tr>\n    <tr>\n      <th>75%</th>\n      <td>750.250000</td>\n      <td>2016.000000</td>\n      <td>123.000000</td>\n      <td>7.400000</td>\n      <td>2.399098e+05</td>\n      <td>113.715000</td>\n      <td>72.000000</td>\n    </tr>\n    <tr>\n      <th>max</th>\n      <td>1000.000000</td>\n      <td>2016.000000</td>\n      <td>191.000000</td>\n      <td>9.000000</td>\n      <td>1.791916e+06</td>\n      <td>936.630000</td>\n      <td>100.000000</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib import pyplot as plt\n",
    "\n",
    "file_path = \"IMDB-Movie-Data.csv\"\n",
    "df = pd.read_csv(file_path) #不加路径默认当前路径\n",
    "# 打印数据信息\n",
    "print(df.info()) #查看数据的信息\n",
    "print('-'*50)\n",
    "\n",
    "print(df.head()) #查看数值类型的数据的信息\n",
    "print('-'*50)\n",
    "\n",
    "df.describe() # 查看 能计算的特征 的统计信息"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.358274300Z",
     "start_time": "2024-05-01T12:58:46.841882600Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "--------------------------------------------------\n",
      "644\n",
      "644\n"
     ]
    }
   ],
   "source": [
    "#这1000部电影有多少导演和演员\n",
    "# # 获取平均评分\n",
    "# print(df[\"Rating\"].mean())\n",
    "print('-'*50)\n",
    "# 导演的人数\n",
    "print(len(set(df[\"Director\"].tolist())))\n",
    "print(len(df[\"Director\"].unique())) #推荐这种方式"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.399870500Z",
     "start_time": "2024-05-01T12:58:47.358274300Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2015\n"
     ]
    }
   ],
   "source": [
    "# # 获取演员的人数 #二维列表\n",
    "temp_actors_list = df[\"Actors\"].str.split(\", \").tolist()\n",
    "# print(temp_actors_list)\n",
    "actors_list = [i for j in temp_actors_list for i in j]  #二维展为一维\n",
    "actors_num = len(set(actors_list)) #set去重\n",
    "print(actors_num) #演员的数量"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.445869800Z",
     "start_time": "2024-05-01T12:58:47.375225700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['50 Cent' 'A.C. Peterson' 'AJ Michalka' ... 'Émilie Leclerc'\n",
      " 'Ólafur Darri Ólafsson' 'Óscar Jaenada']\n"
     ]
    },
    {
     "data": {
      "text/plain": "array([1, 1, 1, ..., 1, 1, 1], dtype=int64)"
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "#想知道每个演员出演的电影数量\n",
    "u,indices = np.unique(actors_list,return_counts = True)\n",
    "print(u)\n",
    "indices"
   ],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.460588300Z",
     "start_time": "2024-05-01T12:58:47.399870500Z"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "###  现在要拍一部电影，从时长、评分、题材三个角度来考虑\n",
    "### 8.3.1 电影时长"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "66 191\n",
      "125\n",
      "--------------------------------------------------\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 1600x640 with 1 Axes>",
      "image/png": "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"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "runtime_data = df[\"Runtime (Minutes)\"].values\n",
    "\n",
    "max_runtime = runtime_data.max()\n",
    "min_runtime = runtime_data.min()\n",
    "print(min_runtime,max_runtime)\n",
    "# 计算组数\n",
    "print(max_runtime - min_runtime)\n",
    "print('-'*50)\n",
    "num_bin = (max_runtime - min_runtime) // 5\n",
    "\n",
    "# 设置图形的大小\n",
    "plt.figure(figsize=(20, 8), dpi=80)\n",
    "# 第二个bins参数必须为int或sequence或str，bins代表划分为多少个单元\n",
    "plt.hist(runtime_data, int(num_bin))\n",
    "plt.grid(alpha=0.5) #alpha是透明度\n",
    "#range第三个参数是步长\n",
    "plt.xticks(range(min_runtime, max_runtime + 5,5))\n",
    "\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.762590200Z",
     "start_time": "2024-05-01T12:58:47.408728100Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.723199999999999\n",
      "--------------------------------------------------\n",
      "9.0 1.9\n"
     ]
    }
   ],
   "source": [
    "#电影评分的分布情况\n",
    "# 获取平均评分\n",
    "print(df[\"Rating\"].mean())\n",
    "\n",
    "# rating,runtime分布情况\n",
    "# 选择图形，直方图\n",
    "# 准备数据\n",
    "runtime_data = df[\"Rating\"].values  # 从Series中取出数据，得到一个ndarray\n",
    "\n",
    "max_runtime = runtime_data.max()\n",
    "min_runtime = runtime_data.min()\n",
    "print('-'*50)\n",
    "print(max_runtime,min_runtime) #最大值最小值电影评分"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.776951500Z",
     "start_time": "2024-05-01T12:58:47.765582300Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "最大评分减去最小评分为7.1\n",
      "组数为14.0\n",
      "--------------------------------------------------\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 1600x640 with 1 Axes>",
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABREAAAIOCAYAAAAvJUrfAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuNSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/xnp5ZAAAACXBIWXMAAAxOAAAMTgF/d4wjAAAlIklEQVR4nO3df4zfdX3A8dfJYR2ZxYF23Ha93kp7daW014MjtRtQNE6jTox1cXMVLsBa3QghtyV0CWbJdB3L9BLHotSEVbGuKWvrj1jdEGIpRrZQoTgbrb2uxx1ytRTpigRYy332R+2XHnd9fT7Q632vfB+PxKTf7+dzd+++8ubz/fbp93vfpqIoigAAAAAAOInX1XsBAAAAAMDUJiICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkGqu9wLGM23atHjLW95S72VMCS+++GKcddZZ9V7GlGZG5cyoGnMqZ0blzKgacypnRuXMqBpzKmdG5cyoGnMqZ0blzKgacyr35JNPxgsvvDBh329KRsS3vOUt8fjjj9d7GVNCf39/zJkzp97LmNLMqJwZVWNO5cyonBlVY07lzKicGVVjTuXMqJwZVWNO5cyonBlVY07lWltbJ/T7eTszAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASDXXewEAAACTqX311lG3l7WMxLbh3XVazdQ1cNt7670EAKYQr0QEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkKkXE559/Pj7wgQ9ER0dHLFq0KN75zndGf39/REQcOHAg3v3ud8fcuXNjwYIFsX379trXZccAAAAAgDND5Vcirly5Mnbv3h2PPvpoXH311XHDDTdERMTq1atjyZIlsWfPnli3bl185CMfiSNHjpQeAwAAAADODJUi4hve8IZ4z3veE01NTRERsWTJkhgYGIiIiLvvvjs+9rGPRUREd3d3/NZv/Vbcf//9pccAAAAAgDPDq/qdiJ/97Gfj6quvjqeeeiqOHDkSF1xwQe1Ye3t7DA4OpscAAAAAgDNH8yv9gjVr1kR/f3/cd9998dxzz03IIvr6+qKvr692+/Dhw7XfudjoDh48WO8lTHlmVM6MqjGncmZUzoyqMadyZlTOjKoxp7GWtYyMuj1nehERI+Of3MBO/DeZfVSNOZUzo3JmVI05Tb5XFBE//elPx5YtW+Lee++Nc845J84555xobm6O/fv3115xODAwEG1tbXH++eef9NjL9fb2Rm9vb+12a2trzJkz51T+Xq8pZlHOjMqZUTXmVM6MyplRNeZUzozKmVE15jTatuHdL7tnJLYNv6o3ab2mffFl+8Y+qsacyplROTOqxpwmV+VHyr6+vtiwYUN85zvfiTe96U21+//oj/4o7rjjjoiIeOihh+JnP/tZXHnllaXHAAAAAIAzQ6VXIj7++OPxl3/5lzF79uy46qqrIiJi2rRp8V//9V/xD//wD/HRj3405s6dG69//etj/fr1cfbZZ0dEpMcAAAAAgDNDpYjY2toaRVGMe+w3f/M345577nnFxwAAgInTvnrruPcvaxkZ5+27AACvjF/8AQAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUs31XgAAAGTaV28d9/5lLSOxbXj3JK8GAKAxeSUiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAINVc7wUAAAAw9bSv3lr787KWkdg2vLuOq5m6Bm57b72XADApKr0S8aabbor29vZoamqKnTt31u5vb2+PefPmRWdnZ3R2dsbGjRtrx/bs2RNLly6Njo6O6O7ujl27dk344gEAAACA069SRPzQhz4U3/ve92LWrFljjm3cuDF27twZO3fujA9/+MO1+1etWhUrV66Mn/70p3HLLbdET0/PhC0aAAAAAJg8lSLiFVdcEa2trZW/6YEDB2LHjh2xYsWKiIhYvnx5DA0NRX9//6tbJQAAAABQN6f8wSrXXHNNXHzxxXH99dfHk08+GRERQ0ND0dLSEs3Nx37lYlNTU7S1tcXg4OCp/jgAAAAAYJKd0gerbN++Pdra2uLIkSNx6623xrXXXhvf+ta3XvH36evri76+vtrtw4cPe9Xirxw8eLDeS5jyzKicGVVjTuXMqJwZVWNO5czoJctaRsa9f870IiLGP8ZLzKmcGZUzo5M78d+urt3lzKicGVVjTpPvlCJiW1tbREScffbZcfPNN0dHR0dERMycOTOGh4fj6NGj0dzcHEVRxODgYO38l+vt7Y3e3t7a7dbW1pgzZ86pLO01xSzKmVE5M6rGnMqZUTkzqsacypnRMSf/RNiR2DZ8ym+saQDmVM6MypnRyXzxZddq1+5yZlTOjKoxp8n1qh8Fnn322Th06FDt9oYNG2Lx4sURETFjxozo6uqK9evXR0TE5s2bhUEAAAAAOENVeiXiqlWrYuvWrbF///5417veFW984xvjnnvuieXLl8eLL74YRVHE7Nmz46677qp9zdq1a6OnpyfWrFkT06dPj3Xr1p22vwQAAAAAcPpUiohr164d9/5HHnnkpF8zb968ePDBB1/dqgAAAACAKcMvtQAAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASImIAAAAAEBKRAQAAAAAUiIiAAAAAJASEQEAAACAlIgIAAAAAKRERAAAAAAgJSICAAAAACkREQAAAABIiYgAAAAAQEpEBAAAAABSIiIAAAAAkBIRAQAAAICUiAgAAAAApEREAAAAACAlIgIAAAAAKRERAAAAAEiJiAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUi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ddLv8aqfNxXU1XPPPVds3bq1GBkZKYqiKG6//fbiyiuvHHPeM888U8yYMaP48Y9/XBRFUfzFX/xF8Vd/9VeTudS6qTqjffv2Feeee+7kLm4Kefrpp2t/3rJlS7Fw4cIx5/zP//xP0dLSUgwPDxcjIyPFH/7hHxb//M//PImrrL8qc/rud79bLFq0aPIWNQXt27eveNvb3lYsWbKk+OpXvzrmeCNfk44rm1GjX5OKoihmzZpVPPLII+k5jX5dqjKjRr8m3XzzzcWNN95Yex4wPDw85pxG30dFUW1Ojb6XTvSP//iPxfve974x93t8e8nJZtTIj28jIyPFb/zGbxSPPvpoURTHZjFt2rTi8OHDo85r9H1UdU6NvJd+8YtfFOedd17xox/9qCiKoti+fXtx0UUXjTmvkfdS1Rk14j66//77i6GhoTHPI6+66qpi3bp1RVEUxb/9278Vl1566bhffyrPm7wSsc7e8IY3xHve855oamqKiIglS5bEwMDAmPO+/e1vx+LFi+Otb31rRET8+Z//eWzYsGEyl1o3VWfU6N70pjfV/vy///u/tXmdaNOmTfH+978/LrjggmhqaoqPfexjDbOPjqsyp0Y3MjISN9xwQ9x+++0xbdq0cc9p5GtSRLUZUY3rEplnn3027rzzzvi7v/u72vX6ggsuGHNeo++jqnPiJXfeeWdcf/31Y+5v9Me3E51sRo2uqakpDh06FBERhw8fjvPPP3/McwH7qNqcGtnevXvj/PPPj4suuigiIi6//PIYHByMhx9+eNR5jbyXqs6oEV1xxRXR2to66r4DBw7Ejh07au9EWL58eQwNDY37Ls5Ted4kIk4xn/3sZ+Pqq68ec//g4GDMmjWrdru9vT2Gh4fj6NGjk7m8KeFkM4o49iS6u7s7urq64m//9m/jxRdfnOTV1dc111wTM2fOjE984hPx5S9/eczx8fbR4ODgZC5xSiibU8SxB62urq7o7u6Oz33uc5O8wvrq6+uL3/u934tLLrnkpOc0+jWpyowiXJMijv33dvHFF8f1118fTz755JjjrkvlM4po3GvS3r1747zzzos1a9bEpZdeGpdffnncd999Y85r9H1UdU7Hz23EvXSi73//+/H000/H+973vjHHGv3x7bhsRhGN+/jW1NQUGzdujA9+8IMxa9as+P3f//340pe+FK9//etHndfo+6jqnCIady/NnTs3nnrqqfj+978fERHf+MY34plnnhnzYplG3ktVZxTRuPvoRENDQ9HS0hLNzc0Rcey/w7a2tnGfD53K8yYRcQpZs2ZN9Pf3x9///d/XeylTVjajlpaW+NnPfhYPPfRQ3HvvvfHAAw/EZz7zmTqssn7uuuuuGBoaik996lNxyy231Hs5U1bZnLq6uuLxxx+Phx9+OL761a/GHXfcEXfffXcdVjr5fvSjH8XmzZvj1ltvrfdSpqyqM3JNiti+fXv88Ic/jIcffjje/OY3x7XXXlvvJU05VWbUyNeko0ePxmOPPRbz58+PHTt2xD/90z/Fhz/84fj5z39e76VNKVXn1Mh76UR33nlnXHPNNbV/aDFWNqNGfnw7evRofOpTn4otW7bEY489Fvfdd1989KMfjYMHD9Z7aVNK1Tk18l4699xzY9OmTfHXf/3Xcckll8Q999wT8+fPd106QdUZNfI+qgcRcYr49Kc/HVu2bIlvf/vbcc4554w53tbWFo899ljt9sDAwKjK3AjKZjRt2rSYMWNGREScd955cd1118UDDzww2cucEq699tr47ne/G0899dSo+8fbR21tbZO9vCnjZHOaPn16nHvuuRER0draGn/yJ3/SMHvpgQceiIGBgZg7d260t7fHf/7nf8bKlSvj85///KjzGvmaVHVGrklRu76cffbZcfPNN4/792/061KVGTXyNamtrS1e97rXxZ/+6Z9GRMTixYvjd37nd+K///u/x5zX6PuoypwaeS8d98tf/jLuvvvuuO6668Y93siPb8eVzaiRH9927twZTzzxRFxxxRUREdHd3R2tra1jPqiv0fdR1Tk18l6KiLjqqqvi/vvvjx/84Afxmc98Jp544omYP3/+qHMafS9VmVGj76PjZs6cOepVqkVRxODg4LjPh07leZOIOAX09fXFhg0b4jvf+c6o39d2one/+93x8MMPx09+8pOIiPjc5z4Xf/zHfzyJq6yvKjM6cOBA7ROFXnjhhdiyZUssXrx4EldZP4cOHYonnniidvtrX/tanH/++XHeeeeNOm/58uXxjW98I/bv3x9FUcQdd9zRUPuo6pyGh4djZGQkIiKeeeaZ+OY3v9kwe+njH/94DA8Px8DAQAwMDMSSJUviC1/4Qnz84x8fdV4jX5OqzqiRr0kRx95Wcvx3IUVEbNiwYdy/fyNfl6rOqJGvSW9+85vjHe94R/zHf/xHRETs27cv9u3bF7/7u7876rxG3kcR1efUyHvpuI0bN8aiRYtqv1/s5Rr58e24shk18uPb8X+k//jHP46IiP7+/ti7d2/Mmzdv1HmNvo+qzqmR91LEsWvycZ/85Cfj7W9/e8yZM2fUOY2+l6rMqNH30XEzZsyIrq6uWL9+fUREbN68OVpbW8fMK+IUnzedwgfCMAGGhoaKiChmz55dLFq0qFi0aFFx2WWXFUVRFJ/4xCeKz3/+87Vzv/71rxfz5s0rLrzwwuLqq68uDh06VK9lT6qqM9q8eXNx0UUXFQsXLizmz59f3HjjjcXzzz9fz6VPmoGBgaK7u7tYsGBBsXDhwuId73hH7VOarr/++uLrX/967dwvfOELxezZs4vZs2cX1113XfF///d/dVr15Ks6p9tvv72YP39+bS/9zd/8Te3TLhvNlVdeWfvkYdek8Z1sRo18TSqKoti7d2/R2dlZXHzxxcWCBQuK97///cW+ffuKonBdOq7qjBr9mrR3795i2bJltWv3pk2biqKwj16uypwafS8VRVG87W1vK/7lX/5l1H0e30Yrm1GjP77967/+a+2/swULFhRf+cpXiqKwj16uypwafS/dcMMNtT2yYsWK4umnny6Kwl46UZUZNeI+WrlyZfHbv/3bxVlnnVXMmDGjuPDCC4uiKIqf/OQnxZIlS4q5c+cWl1xySfHDH/6w9jUT9bypqSiKYuLaJwAAAADwWuPtzAAAAABASkQEAAAAAFIiIgAAAACQEhEBAAAAgJSICAAAAACkREQAAAAAICUiAgAAAAApEREAAAAASP0/ya13NLiFoxsAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 计算组数\n",
    "print(f'最大评分减去最小评分为{max_runtime - min_runtime}')\n",
    "num_bin = (max_runtime - min_runtime) // 0.5\n",
    "print(f'组数为{num_bin}')\n",
    "print(\"-\"*50)\n",
    "\n",
    "# 设置图形的大小\n",
    "plt.figure(figsize=(20, 8), dpi=80)\n",
    "# 第二个bins参数必须为int或sequence或str，bins代表划分为多少个单元\n",
    "plt.hist(runtime_data, int(num_bin))\n",
    "plt.grid(alpha=0.5)\n",
    "#因为range的步长不支持0.5,自己做一个列表\n",
    "_x = [min_runtime+0.1]\n",
    "i = min_runtime+0.1\n",
    "while i <= max_runtime + 0.5:\n",
    "    i = i + 0.5\n",
    "    _x.append(i)\n",
    "\n",
    "plt.xticks(_x) #设置x轴的刻度\n",
    "\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.997361700Z",
     "start_time": "2024-05-01T12:58:47.778947100Z"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [
    "### 8.3.3 导演要拍什么题材电影"
   ],
   "metadata": {
    "collapsed": false
   }
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0     Action,Adventure,Sci-Fi\n",
      "1    Adventure,Mystery,Sci-Fi\n",
      "2             Horror,Thriller\n",
      "Name: Genre, dtype: object\n"
     ]
    }
   ],
   "source": [
    "print(df[\"Genre\"].head(3))  #看前几条数据，掌握格式，内容类型"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:47.997361700Z",
     "start_time": "2024-05-01T12:58:47.993669800Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20\n",
      "   Mystery  War  Sci-Fi  Comedy  Musical  Crime  Romance  Biography  Horror  \\\n",
      "0      0.0  0.0     0.0     0.0      0.0    0.0      0.0        0.0     0.0   \n",
      "1      0.0  0.0     0.0     0.0      0.0    0.0      0.0        0.0     0.0   \n",
      "2      0.0  0.0     0.0     0.0      0.0    0.0      0.0        0.0     0.0   \n",
      "\n",
      "   Family  Drama  Animation  Sport  Fantasy  Thriller  Western  Adventure  \\\n",
      "0     0.0    0.0        0.0    0.0      0.0       0.0      0.0        0.0   \n",
      "1     0.0    0.0        0.0    0.0      0.0       0.0      0.0        0.0   \n",
      "2     0.0    0.0        0.0    0.0      0.0       0.0      0.0        0.0   \n",
      "\n",
      "   Music  History  Action  \n",
      "0    0.0      0.0     0.0  \n",
      "1    0.0      0.0     0.0  \n",
      "2    0.0      0.0     0.0  \n"
     ]
    }
   ],
   "source": [
    "# 统计分类的列表\n",
    "temp_list = df[\"Genre\"].str.split(\",\").tolist()  # 得到二维列表，[[],[],[]]\n",
    "#print(temp_list)\n",
    "\n",
    "# 二维变为一维\n",
    "genre_list = list(set([i for j in temp_list for i in j]))\n",
    "print(len(genre_list)) # 20种题材类型\n",
    "\n",
    "# 构造全为0的数组，行是原来的样本数，列是题材类型数目，one-hot编码，\n",
    "zeros_df = pd.DataFrame(np.zeros((df.shape[0], len(genre_list))), columns=genre_list)\n",
    "print(zeros_df.head(3))"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:48.161920100Z",
     "start_time": "2024-05-01T12:58:47.997361700Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "outputs": [
    {
     "data": {
      "text/plain": "   Mystery  War  Sci-Fi  Comedy  Musical  Crime  Romance  Biography  Horror  \\\n0      0.0  0.0     1.0     0.0      0.0    0.0      0.0        0.0     0.0   \n1      1.0  0.0     1.0     0.0      0.0    0.0      0.0        0.0     0.0   \n2      0.0  0.0     0.0     0.0      0.0    0.0      0.0        0.0     1.0   \n3      0.0  0.0     0.0     1.0      0.0    0.0      0.0        0.0     0.0   \n4      0.0  0.0     0.0     0.0      0.0    0.0      0.0        0.0     0.0   \n\n   Family  Drama  Animation  Sport  Fantasy  Thriller  Western  Adventure  \\\n0     0.0    0.0        0.0    0.0      0.0       0.0      0.0        1.0   \n1     0.0    0.0        0.0    0.0      0.0       0.0      0.0        1.0   \n2     0.0    0.0        0.0    0.0      0.0       1.0      0.0        0.0   \n3     1.0    0.0        1.0    0.0      0.0       0.0      0.0        0.0   \n4     0.0    0.0        0.0    0.0      1.0       0.0      0.0        1.0   \n\n   Music  History  Action  \n0    0.0      0.0     1.0  \n1    0.0      0.0     0.0  \n2    0.0      0.0     0.0  \n3    0.0      0.0     0.0  \n4    0.0      0.0     1.0  ",
      "text/html": "<div>\n<style scoped>\n    .dataframe tbody tr th:only-of-type {\n        vertical-align: middle;\n    }\n\n    .dataframe tbody tr th {\n        vertical-align: top;\n    }\n\n    .dataframe thead th {\n        text-align: right;\n    }\n</style>\n<table border=\"1\" class=\"dataframe\">\n  <thead>\n    <tr style=\"text-align: right;\">\n      <th></th>\n      <th>Mystery</th>\n      <th>War</th>\n      <th>Sci-Fi</th>\n      <th>Comedy</th>\n      <th>Musical</th>\n      <th>Crime</th>\n      <th>Romance</th>\n      <th>Biography</th>\n      <th>Horror</th>\n      <th>Family</th>\n      <th>Drama</th>\n      <th>Animation</th>\n      <th>Sport</th>\n      <th>Fantasy</th>\n      <th>Thriller</th>\n      <th>Western</th>\n      <th>Adventure</th>\n      <th>Music</th>\n      <th>History</th>\n      <th>Action</th>\n    </tr>\n  </thead>\n  <tbody>\n    <tr>\n      <th>0</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n    </tr>\n    <tr>\n      <th>1</th>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>2</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>3</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n    </tr>\n    <tr>\n      <th>4</th>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n      <td>0.0</td>\n      <td>0.0</td>\n      <td>1.0</td>\n    </tr>\n  </tbody>\n</table>\n</div>"
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 给每个电影出现分类的位置赋值1,one-hot的中文是独热码\n",
    "for i in range(df.shape[0]):\n",
    "    zeros_df.loc[i, temp_list[i]] = 1 #temp_list是二维列表，temp_list[i]是一个一维列表，表示第i个电影的题材\n",
    "    # 比如zeros_df.loc[0,[\"Sci-fi\",\"Mucical\"]] = 1，会把这个电影拥有的题材标记为1\n",
    "\n",
    "zeros_df.head(5)"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:49.132896300Z",
     "start_time": "2024-05-01T12:58:48.031270500Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Mystery      106.0\n",
      "War           13.0\n",
      "Sci-Fi       120.0\n",
      "Comedy       279.0\n",
      "Musical        5.0\n",
      "Crime        150.0\n",
      "Romance      141.0\n",
      "Biography     81.0\n",
      "Horror       119.0\n",
      "Family        51.0\n",
      "Drama        513.0\n",
      "Animation     49.0\n",
      "Sport         18.0\n",
      "Fantasy      101.0\n",
      "Thriller     195.0\n",
      "Western        7.0\n",
      "Adventure    259.0\n",
      "Music         16.0\n",
      "History       29.0\n",
      "Action       303.0\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "# 将上面的位图沿0轴相加，可达得到每个分类有多少电影\n",
    "# sum会让df变为Series\n",
    "genre_count = zeros_df.sum(axis=0)\n",
    "print(genre_count)\n",
    "# print(zeros_df.sum(axis=1)) #每部电影的题材数量"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:49.148669Z",
     "start_time": "2024-05-01T12:58:49.137901400Z"
    }
   }
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Musical        5.0\n",
      "Western        7.0\n",
      "War           13.0\n",
      "Music         16.0\n",
      "Sport         18.0\n",
      "History       29.0\n",
      "Animation     49.0\n",
      "Family        51.0\n",
      "Biography     81.0\n",
      "Fantasy      101.0\n",
      "Mystery      106.0\n",
      "Horror       119.0\n",
      "Sci-Fi       120.0\n",
      "Romance      141.0\n",
      "Crime        150.0\n",
      "Thriller     195.0\n",
      "Adventure    259.0\n",
      "Comedy       279.0\n",
      "Action       303.0\n",
      "Drama        513.0\n",
      "dtype: float64\n",
      "--------------------------------------------------\n",
      "Index(['Musical', 'Western', 'War', 'Music', 'Sport', 'History', 'Animation',\n",
      "       'Family', 'Biography', 'Fantasy', 'Mystery', 'Horror', 'Sci-Fi',\n",
      "       'Romance', 'Crime', 'Thriller', 'Adventure', 'Comedy', 'Action',\n",
      "       'Drama'],\n",
      "      dtype='object')\n",
      "--------------------------------------------------\n",
      "[  5.   7.  13.  16.  18.  29.  49.  51.  81. 101. 106. 119. 120. 141.\n",
      " 150. 195. 259. 279. 303. 513.]\n",
      "--------------------------------------------------\n"
     ]
    },
    {
     "data": {
      "text/plain": "<Figure size 1600x640 with 1 Axes>",
      "image/png": "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Jk0Kfw8ePDimTp0alZWVtS5r/bHs+t+x6lrO1qrNmOjyyy+Pa6+9tsHqcMstt8SiRYsarPzq1KV/NrRBgwbFpEmTtut71mU8vPH3jgULFsRxxx3XkNXbZuv2xxUVFdGmTZs4/fTT44UXXmjsau3UGvwuw7lq2bJlPP744zFw4MCIiLjrrruiW7duW13emDFj6qtq26Rv377xla98pfD3lClT4uijj46pU6fG8ccfX3jsjjvuqHPZ3/3ud+Mb3/hG7LHHHnV6XVVVVRQXN35Xru/PZkdp187alze2cOHCGD16dPzXf/1XHH744RER8ec//zmKiorqpfyqqqqYOnVqLFu2LAYMGFAvZW6r733ve1t8zqRJk2KfffaJDh061Kns+u6/999/fxx11FHx8MMPx6233hp77bVXjc/v1q1b3H///fX2/hFrA8FHH300zj777A0eayz3339/vX/xeOqpp+q1vOqsq/uaNWviS1/6UkyaNCm+9rWvxWmnnVav77N69epo0qRJvZZZX+pj/T366KNRWVkZPXv2rJ9KNYD6PoZ81scKdbFxndeFa7vsUrvf87dn/9+aY+iECRNqLPPcc8+NW265ZYPHGmqfu257nD9/fnTq1ClOOOGE6NGjR4O8145u1KhRsXTp0njxxRdj3333jZRSPPjgg7F06dLYZ599Cs+rqqqq1ThiR7Gu78yZMycqKys36Evr/3i/JVVVVfU+lq3r/qmuY6KGcMstt8Txxx8fBx10UJ1fuy37ptr2z51VXdb9xt87DjnkkHjuuee2V1W32vrjo4cffjhOPfXUePrpp+Poo48uPKeux0Oq5xNsIOedd1789Kc/jYiI5cuXx0svvVTYGDeerffEE08UAqNZs2bFP/zDP0RFRUWUlZXFVVddFRFrfyld/9f0G264IcrKyqKioiJ69uwZH330USxatCj69u0bRx11VHTu3Dkuvvjiep3dFBHRs2fPWLBgQcybNy8i1u5ovvOd7xQOpAsXLoy5c+dGt27d4oILLogePXpEeXl5jB49Oj799NOIiLjuuuuiY8eOhV/m/vd//7dwYD3uuOOisrIyFi9eHCtWrKi2jOOPPz4uueSSOOaYY+Lkk0+OSZMmRb9+/eKcc86JsrKy6NatW/ztb3+r17bX12fz4osvRvfu3aOysjK6d+8eL774YqGMVq1axRVXXBE9evSIESNGbNf6V6cx+nJjeOedd6JJkyax3377FR7r2rVrFBUVRatWreJb3/pWHHXUUdGmTZsNZjhOmzYtevXqFeXl5dGjR4/44x//GBFrB5z77LNPXHHFFdG1a9e47bbb4o477oh77703Kisrd4hB9MiRIwtftn75y19GeXl5VFZWRmlpaTz22GMxYcKEmDZtWvzTP/1TVFZWxlNPPRWrV6+Ob33rW1FaWhqlpaXx9a9/vbBdjhw5Mr7yla9E7969o7S0NG6++eYYPXp04f2WLVsWBxxwQCxdurTOdb3rrrviiiuuiN69exeCvpq2+/V/pV+3Lq6++uro2rVrtG3bNv74xz8W2lVaWhp/+ctfIiKq3Y8uXrw4vvOd78SUKVOisrKysM8qKioq/Cq9pb5wzTXXFPpQfQdvkydPjqOPPjq6dOkSFRUV8ctf/rKw7Pjjj49vfvOb0bt372jZsmVcffXV8dRTT8Wxxx4brVq1inHjxhWeu7lZTQsWLIgWLVpssG0OGTIkbr/99m2u96effhofffRR7LvvvpvsT2666abo3LlzlJWVxbnnnhvLly+PiLW/jg8ePDg6dOgQxx13XFx44YUxcuTIiFjbJ/r27RsDBw6MsrKy+NOf/hTjxo2rcZ9b3bYdsXYgeswxx8QRRxwR1113XUSsXc8dOnSIlFLheb169Ypf/epXW/05bGn9XX755XHcccfFkUceWeh7Tz31VDz++ONx0003RWVlZUyYMKHGccBLL71UmL1VWloat99+e4Ou23VqOoaUlZVt8Mv/nXfeWZjZ2xBjhYsvvjjGjh1beL+ZM2fGYYcdFlVVVfXW3tpYvHhxnHnmmVFWVhalpaUxfvz4wrKNxwHXXnttDBw4MPr37x+lpaWxcOHC+NnPfhbl5eVRXl4eX/jCF2L+/PkRsfn+v73UdAx9/fXXo3///oU6r/thdGtmTK6/z20Ihx56aHTo0CH+93//N2bPnh39+vUrHBvXr2tRUVF8//vfj6OPPjpatWoVjz76aFx//fXRrVu3aNu2bWHsV1VVFf37949u3bpF586dCzOiI9Yep0pLS+OrX/1qVFRUROfOnWPatGmF93jyySeje/fuUVFREZWVlfHyyy9HRMQrr7wSJ5xwQnTr1i26dOkSv/jFL+qt/bNnz45f/OIXMXHixNh3330LbT3rrLNi7ty50blz5xg1alRUVlbGI488ssE44tprr40vf/nL8aUvfSnatWsXX/ziF+Mvf/lL9O/fP9q1axfnnHNOYX9U03bbWKqqqja7LjY3ntt4LFudp59+Oo499tg46qijokePHoUZsVOnTt3ks6yLzY2JFi5cGP37949OnTpFv379Ct9HPvroo9h///03mM137bXXFmbkz5o1K77whS9E9+7do7y8PG677bbC84qKimLs2LHRo0ePOOKII2LixIkRsfYH5QULFsTgwYML4erGn8ltt91W47F5a/pxTf2zdevW1Y4b6qtvvvHGG9GrV6/o3LlznHHGGfH+++9HRMOOkza2uXW/fPnyOP/886O0tDQqKiriK1/5SkyfPn2T7x3r+vI6Tz/9dHTt2jXKy8ujT58+8f/+3/+LiC3vm7anM888M8aMGRM333zzZo+Hl19+eWGM17t378JZLhH1s5/OQqLeHX744enVV19NnTp1SvPnz0+33357uvLKK9M111yTLr300jRx4sR0+umnF57/y1/+MvXp0yellNIll1ySxo4dW1j27rvvppRS4bUppTRp0qTUvXv3tGzZspRSSkuXLk1VVVXp448/TitWrEgppVRVVZW+8IUvpPvuuy+llDZ5z21x4oknprvvvjutXLkyHXHEESmllI488sj08ccfp3vvvTf17ds3XXDBBek///M/U0oprVmzJo0aNSrdeOONaenSpalZs2bpo48+Siml9OGHH6aPP/44pZRSRKT33nuv8D7VlZFSSn369En9+/dPn376aaF9TZs2TX/7299SSildccUVafTo0fXS3rqozWezePHiwvNffPHF1L59+8Lfhx9+eBo1alRas2bNdq/75jRWX24Mq1evTmeeeWbad9990xlnnJFuvPHGNG/evJTS2s9h2LBhac2aNWnJkiXpsMMOS3/84x/TJ598kg477LD061//OqWU0nPPPZdatGiRVqxYkd56660UEYU+nNKGbd9eDj/88NSuXbtUUVFR+Pf5z38+PfLII2nEiBHphz/8YUoppfLy8vTCCy8UPot122KfPn3SI488UijvP/7jP1KfPn3SypUr06pVq9Ipp5ySfvCDH6SUUhoxYkQqLy9P77//fkoppffeey81b968UNa4cePSV77ylTq3YcaMGenQQw9NVVVV6bHHHkvHHHNMSqnm7X7KlCmpoqIipZQK62JdOyZMmJA+//nPp2effTallNKNN96YBg0alFJKdd6Prttv1aYvPPjggymllH71q1+ldu3a1flzWN/G6/XBBx8s7Dfeeuut1KJFi7Ry5cqU0tp1OHDgwFRVVZWWLl2amjZtmr72ta+lNWvWpHnz5qXPf/7zhXW0bptf97p1n9mQIUPS+PHjU0opLVq0KDVv3rzwOW1L3Zs1a5ZOOOGEtGrVqg0+36eeeip16NChUK8LLrggjRkzJqWU0uWXX55GjBiR1qxZk95///1UWlqaRowYkVJau44+97nPpTfeeKPwflva525u21637Otf/3pKKaUlS5akpk2bFvYJvXr1Sk8//XRKKaU///nPqU2bNnXab9d1/Z1xxhlp1apV6aOPPkqtWrUqbKvrb8Mp1dx/TzvttDR58uTCc5cuXZpSqt91u7l21nQMufPOO9M555xTeH55eXn6wx/+0GBjhTfeeCMdfvjhhePMJZdckr73ve/VS1s31/bq9r1f/vKX05VXXplSSumdd95JJSUl6cUXXyy8bv1xwDXXXJMOPvjgtGjRopRSSv/zP/+TWrRoUeiL1113XRowYEBKafP9f3up7hi6atWq1LZt2w363pIlS1JKmx5f1nfNNdekAw44oPDZjRw5MqW06fqvD+vv915//fV05JFHpsWLF6cePXqkO+64I6WU0ptvvpn222+/NGfOnEI9brnllpRSSs8880z6/Oc/nyZOnJhSSumBBx5I3bp1Symt7ZN///vfC/8fM2ZMuv7661NKa49TTZo0SS+99FJKKaXbb789nXzyySmllGbOnJmaN2+eXn/99ZRSSp9++mlatmxZeu+991JlZWVasGBBSikV9lvr+sO2uv/++1N5eflml02ZMiUVFRWlqVOnFh5bfx90zTXXpCOOOCItXbo0rVmzJvXu3TsdffTR6f3330+rVq1KFRUV6Yknnkgp1bzdNrS33norNWvWbJO2VbcutjSeW//Ytf7Y469//Wvq2bNnWr58eUoppVmzZqWDDjoorVy5crOfZW1VNyYaNGhQuuqqq1JKKc2bNy8dcMAB6Zprrkkprf28b7rpppTS2s+7VatW6bXXXktVVVXpqKOOKvSzDz/8MJWVlaU//elPKaW1/fzmm29OKa3dNvbaa6+0atWqlNKG283Gn0lKKf34xz+u9ti8tf24pv5Z07ihvvpmt27d0oQJE1JKKb322mtpt912K2z3DXksXae6dT9y5Mh00UUXpdWrV6eU/m/cs/E6Wb/vv/POO2m//fZLr732WkoppXvuuSd17NgxrVmzpsbtoaFt3K9SSunhhx9OHTt23OR4mNKGY7z77rsv9e/fv/B3feync2CGYAMaNmxYTJo0KX76059ucCppTXr37h0/+clP4l/+5V/iN7/5zWanPj/xxBMxZsyYaNasWURE7LvvvtGkSZNYs2ZNXHHFFVFRURFdunSJadOmNcipFX379o2pU6fGyy+/XDidomfPnvHiiy/G1KlTo2/fvvHoo48WZi106dIlnnvuuZg9e3Y0bdo02rZtG0OHDo3x48fH0qVLqz3tp7oy1hk6dGjsuuuuhb/XzeJY9/+//vWv9d72LanNZ/Pqq69Gnz59orS0NMaMGRMzZ86Mjz/+uFDGyJEj6+001fqyvftyY9hll13ioYceihdeeCEGDBgQf/zjH6Nz586FPjdq1KgoKiqKAw44IM4888x45plnYubMmbHLLrtE//79IyLi2GOPjRYtWhS2u1133TWGDh3aKO1Z3/333x/Tp08v/Nvc6XonnnhiXHrppXHjjTfGa6+9Vu1pF88880yMHDkydt999yguLo4LLrggfvvb3xaWn3XWWbH33ntHRMQ+++wTgwYNip/+9KeRUorbb789Lr744jrX/6677orhw4dHkyZN4tRTT4233norXn/99Yio/Xa/xx57FGafdevWLfbaa6/o27dvRET06NEjZs2aFRGx1fvRLfWFPfbYI84888wt1rMu1l+vhx9+eJxyyilRWloaZ5xxRixdujTeeuutwnMHDRoUTZo0iX333Tdat24dX/ziF6OoqCgOPfTQaN68ecyZM6fG97r00kvj3//93yMi4ic/+Umcc84523SK0rq6//3vfy/MiFrfM888E4MHDy70w4suuqjQz373u9/FeeedF0VFRbH33ntvcq3IXr16Rfv27Qt/b2mfu7lte50hQ4ZERMQBBxwQrVu3Lnyml156aWEWxb//+7/HV7/61Trvt+uy/gYPHhzFxcXxuc99LiorK6vtPzX13759+8a//uu/xve+9714/vnnC7Mr6nvdbk51x5ChQ4fGlClT4p133ilcd/e4445rsLFC+/bto1OnTvHYY4/Fhx9+GPfdd98Gs5jrW3X73meeeSYuvPDCiIg48MADN+l3G48DTj311GjRokVErL30yIABA+LQQw+NiIivfvWr8eyzz8bq1asjYtP+v71UdwydMWNGrFy5Ms4555zCcw844IBalXnuuecWPrt1M5MayuDBg6Njx47RqVOn+PrXvx577LFH/PnPfy5cp6tt27Zx7LHHbnC63bp9T7du3eLDDz8sXE5i/WNKSil++MMfRpcuXaK8vDyefPLJDY4pbdq0KZwGt/6x4be//W0MGDCgcLmOXXfdNZo1axYvvPBC/O1vf4tTTjklKisro1+/fhERG8yKaUitW7eOPn36VLv85JNPjn333TeKioqia9eucfzxx8fee+8dxcXF0aVLl8LnsqXttjFUty4itm489+tf/zpmz54dvXv3jsrKyhg0aFDssssuMXfu3IjY8mdZnerGRL/73e8K16M99NBDN7gEx3nnnVfYhqZOnRr7779/lJWVxcyZM2PGjBlx9tlnR2VlZfTq1StWrFhRmCkWsXY7jIjo0KFDFBcXb/V1A9ffNzVEP65p3BCx7X3z/fffj+nTpxdmPZaVlcWxxx5bKH97HEurW/dPPPFEXH755YXTZ5s3b77Fsl5++eUoKyuLsrKyiFi7nhcsWFCYcV7T9rC9pfXOyFj/eBixdl95zDHHRGlpaXzve9/bZMxeH/vpnd1n62IqnzHDhw+Prl27Rrt27aJt27aFx4uLiwsDt4jY4OLYAwcOjF69esVvf/vbuO222+KWW26p9all48aNi8WLF8fLL78ce+yxR1x22WUNcuHtvn37xl133RUtW7YsnB7ap0+fmDJlSkyZMiUmTZoUP/rRj+Khhx6Kdu3abfL6l156KV544YWYOnVq9OzZM+67777NXuA0pVRtGRGxyU52/S8LTZo02e6nAEVs+bOZMGFCfOELX4gpU6ZE9+7d4/33349mzZrFJ598Ep/73OciYtN27Qi2d19uTB06dIgOHTrEhRdeGAMGDIjHH398s8+r7sv/+o/vueeen5lrW4wbNy5mzJgRU6ZMiREjRsS5554b//zP/7zF1238OWzcfy+55JI47bTTomPHjtG8efPo0qVLneq1atWq+NnPfha77rprTJ48OSLWnv5y1113RWlpaa23+913332D51X3uvrcj67/2ey+++6Fv5s0abLBdlMfzj777PjBD34QgwYNioiI/fbbb4N6b9zeuu4ve/ToEXvuuWdMmTIl7rzzzg3Ci21RXFwcAwcOjG9961uFQenm1BS21dQHP/300zjzzDNr3OfWVF51n9OZZ54Z//zP/xyvvvpqPP7443HzzTfX3NAtqOv6q2591dR/v/GNb8Tpp58ezzzzTHz729+O0tLS+I//+I8GW7frq+4Y8rnPfS5GjhwZ48ePj9dffz2+9rWvFdrYUGOFSy+9NG644YZYsmRJnHTSSRt8sWgsW9qP1jQu2NJrt7eNj6FPPPHEFl+zbNmywpjpiCOOqPPpk/Vh3TWrnnnmmfjSl74UJ5xwwibP2fizXrddrvshc/2/122jkydPjmeffTZ+//vfR9OmTeNHP/pRPPvss5uUsfHrqpNSis6dOzfYRfa7du0as2bNinfffTf233//TZZvqX/V9lizpe22MdS0LrZmPJdSipNOOqkwdlnf/Pnzt2pbrWlMtLH1++sxxxwTa9asiT/96U8xadKkOO+88wp13G+//WoMP2rbR2v6ThCxYd/Z2n68pf65vuq214it65vrTg+u7j0a+lhal3VfH3aE79XrvPLKK1FaWhoRG/ajuXPnxsUXXxyvvPJKHHnkkfHaa69F7969N3htfeynd3afjW+qn1GHHHJIXH/99XHDDTds8HibNm3itddei48//jiqqqo2OFDMmjUrWrRoEcOHD48bb7xxs3cPPO200+KOO+4oXBdh2bJlsXr16njvvffioIMOij322CMWLVpUr9cUWV/37t1j8eLFce+9924Qev385z+PhQsXRo8ePeKMM86IG264obChvffeezF79uxYsWJFvPPOO3HcccfF1VdfHccee2y8+uqrERGx9957F9oUEdWWsSPb0mdTWVkZn376abRs2TIiIn784x83Ym1rb3v35cYwf/78wjXfItb2t7feeiuOPPLIiIjCXcSWLl0ajzzySJx44onRvn37WLNmTeEXyBdeeCEWLVpU7Y0CmjZtukEf35G88cYbhWuOXXTRRYX1tXGd+/XrF3fffXd8+umnUVVVFRMmTIiTTz652nI7dOgQrVu3jtGjR2/V7MDHH388WrduHfPnz485c+bEnDlz4qWXXoqf/exnG9y5tL7UtB+taf3VtS/Ut/fee68wU/Kee+6J9957r97f49JLL43hw4dHx44d6/VL3LPPPrvJjKZ+/frFAw88UBiAjx8/vtDPTjjhhPjP//zPSCnFBx98EA888EC1Za9cuXKL+9zNbdtbUlxcHGPGjInTTjst/vEf/3GbL2S+tetv4z5ZU/+dOXNmHHHEEXHBBRfEt7/97Q32yQ21btep7hgSEfG1r30t7rzzznj22WcLM1Eacqxw8sknx6JFi+K6667bqn1SfejXr1/85Cc/iYiIJUuWxMMPPxwnnXRSrV7bt2/f+PWvfx0LFiyIiLV3Oz3xxBMb/eY51R1DS0tLY88994z77ruvsOzvf//7Bq/dZ599CjMBGyMMXF+/fv3ioosuiquuuiq6du1amFU1e/bseP755zf5srkl7733XhxwwAHRtGnTWLFiRa3vSNq/f/94+umn44033oiItWHA8uXLo1evXvHWW29tEDZMnz693q6/16ZNmxg4cGCMGjWqcK3GdQFJfV6b+7M4xq+r/v37xzPPPBOvvfZa4bFtva5nTWOiPn36FK7XunDhwk1+0D7vvPPixz/+cTz55JOF2e/t27ePpk2bbjADd/bs2bW61vPGx582bdrEtGnTYvXq1fHRRx/FQw89VO1rt7Yf19Q/W7duXe24oS6q65tNmzaNLl26xN133x0RETNmzIjnn39+g9c25LG0pnV/2mmnxc0331y4DuKSJUsiouZxa8+ePeN//ud/CtfQ/vnPfx6HHnpoYfb5juKxxx6L22+/Pb75zW9usmz58uWx6667xsEHHxwppQ2uf1kXW7uf3lkIBBvYeeedF8ccc8wGj/Xs2TNOPfXUKC0tjeOPP36DX8sffPDBKCsriy5dusTgwYM3e0faYcOGFWZfVVRUxKmnnhqffPJJXHrppfHyyy9H586dY9iwYYXp1/Vt1113jWOPPTZWrFhROJWhXbt2sWLFijj22GNj1113jR/+8IeFU5vKy8vjxBNPjDlz5sTy5csLF9IuLy+PVatWFW6e8c1vfjNOOumkwoXCqytjR7alz6ZZs2Zx3XXXRY8ePeKoo46K3XbbrZFrXHvbsy83hnV3y2vXrl1UVlbGcccdFyNGjIjTTz89ItZOv193UeiLL744evXqFbvttls8/PDDcc0110R5eXl84xvfiAcffLDaX33/8R//MaZPn77D3FRkfd/+9rejc+fO0aVLl/jZz34W1157bUREjB49OsaOHVu4qcjo0aOja9eu0bVr16isrIxWrVpt8cLaF1xwQVRVVRVmP9XFXXfdVQgJ1unYsWMceuihsWLFijqXtyU17UdPPPHE+OSTT6K8vHyTOwzWtS/Ut1tvvTUGDRoUXbp0iVdffbUQgNWnQYMGxQcffFAvIcq6C5GXlpbG66+/HrfeeusGy0855ZTCPqesrCzef//9uP766yMi4jvf+U6sWLEiOnbsGAMGDIiKiopqA7mmTZtucZ+7uW27NkaNGhXz58+vl89ja9ffsGHD4oEHHoguXbrEhAkTauy/t912W2Ebv+qqq+Lf/u3fCsvqc91WZ3PHkIiIkpKS6NKlSwwdOjT23HPPiIgGHSsUFRXFqFGj4sADD9xsfbaHH/3oR/H6669HWVlZ9O3bN/7lX/5lg7sn1qS0tDRuuummGDBgQJSXl8dzzz1XCBcbU03H0MceeywmTpxYuIFYTUHBjuDqq6+O559/Pn70ox/F/fffHxUVFTFo0KCYMGFCnfetw4cPj48++ijat28fp5xyymZnuW5OmzZtYuLEiTF06NCoqKiIo48+OmbOnBn77rtvPPnkkzF27NioqKiITp06xZVXXlmvNxH86U9/WnjPzp07R6dOneI3v/nNBjeM2VafxTF+XbVp0yYmT54cF154YVRUVETHjh03uWt2XdU0Jho0aFC89NJL0alTpxg+fPgms1yHDRsWP//5z6Nfv36FS0YUFxfHE088EQ8//HCUl5cXbnSy/mU1qnPJJZfEBRdcULipyJlnnhmHHHJIdOzYMb74xS/WeEbItvTj6vrnueeeW+24oS5q6pt333133HnnnVFaWhpXXXXVJj8QNOSxtKZ136dPn/jkk0+irKwsKisr49vf/nZE1Py9o3nz5nHvvffG8OHDo7y8PG6//fb4xS9+sUNctmrw4MFRUVERbdq0ibvuuiueeuqpzR4jy8rK4uyzz47OnTtH9+7dt3rsu7X76Z1FUVr/pGwANrHuzlTba7bXzubiiy+OFi1axNVXX93YVWEbTJs2LYYMGRJvvPFGo54Kv2rVqli9enXsscce8eGHH0b//v3j61//+ibXEqyNbdm2H3zwwbj99tvjd7/7XZ1fu6NpzHX74YcfRvv27eO5554rzJJsaF/84hdj8ODBMWzYsO3yfgDs/HaUcRLUhWsIAtAgFixYECeccELst99+8fTTTzd2ddgG559/fvzmN7+JCRMmNPog97333otTTjklVq9eHStXrozTTz89vvzlL2/XOgwYMCDefPPNRj+9sT405rq944474vvf/3589atf3S5h4LRp0+Lss8+OTp06FU6ZA4BttSONk6AuzBAEAAAAgIyIrwEAAAAgIwJBAAAAAMiIQBAAAAAAMiIQBAAAAICMCAQBAAAAICMCQQAAAADIyP8HLBdiZQZPqQoAAAAASUVORK5CYII="
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 排序\n",
    "genre_count = genre_count.sort_values()\n",
    "print(genre_count)\n",
    "print('-'*50)\n",
    "\n",
    "_x = genre_count.index  # 取出Series的索引，即题材名称，作为X轴坐标\n",
    "print(_x)\n",
    "print('-'*50)\n",
    "\n",
    "_y = genre_count.values # 取出Series的值，即各题材数量（已从小到大排好），作为Y轴坐标\n",
    "print(_y)\n",
    "print('-'*50)\n",
    "\n",
    "# 画图\n",
    "plt.figure(figsize=(20, 8), dpi=80)\n",
    "plt.bar(range(len(_x)), _y, width=0.4, color=\"orange\")\n",
    "plt.xticks(range(len(_x)), _x)\n",
    "plt.show()"
   ],
   "metadata": {
    "collapsed": false,
    "pycharm": {
     "name": "#%%\n"
    },
    "ExecuteTime": {
     "end_time": "2024-05-01T12:58:49.369079100Z",
     "start_time": "2024-05-01T12:58:49.153656300Z"
    }
   }
  },
  {
   "cell_type": "markdown",
   "source": [],
   "metadata": {
    "collapsed": false,
    "ExecuteTime": {
     "end_time": "2024-04-30T05:53:05.175565200Z",
     "start_time": "2024-04-30T05:53:05.041265200Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "20\n",
      "--------------------------------------------------\n",
      "   Comedy  Action  History  Mystery  Drama  Western  Fantasy  Animation  \\\n",
      "0     0.0     0.0      0.0      0.0    0.0      0.0      0.0        0.0   \n",
      "1     0.0     0.0      0.0      0.0    0.0      0.0      0.0        0.0   \n",
      "2     0.0     0.0      0.0      0.0    0.0      0.0      0.0        0.0   \n",
      "\n",
      "   Sci-Fi  Sport  War  Horror  Romance  Family  Adventure  Music  Crime  \\\n",
      "0     0.0    0.0  0.0     0.0      0.0     0.0        0.0    0.0    0.0   \n",
      "1     0.0    0.0  0.0     0.0      0.0     0.0        0.0    0.0    0.0   \n",
      "2     0.0    0.0  0.0     0.0      0.0     0.0        0.0    0.0    0.0   \n",
      "\n",
      "   Thriller  Musical  Biography  \n",
      "0       0.0      0.0        0.0  \n",
      "1       0.0      0.0        0.0  \n",
      "2       0.0      0.0        0.0  \n"
     ]
    }
   ],
   "execution_count": 124
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [
     "# 8 Pandas统计计算和描述\n"
    ],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
